package com.foftact.etfposi.mapper;

import com.foftact.etfposi.ETFPosiation;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * ETF持仓明细Mapper接口
 * 用于操作etf_position表
 */
@Mapper
public interface ETFPosiationMapper {
    /**
     * 插入单条ETF持仓数据
     * @param etfPosiation ETF持仓数据对象
     * @return 插入的行数
     */
    int insert(ETFPosiation etfPosiation);

    /**
     * 批量插入ETF持仓数据
     * @param etfPosiationList ETF持仓数据列表
     * @return 插入的行数
     */
    int batchInsert(@Param("list") List<ETFPosiation> etfPosiationList);

    /**
     * 根据基金代码、年份和季度查询持仓数据
     * @param fundCode 基金代码
     * @param reportYear 报告年份
     * @param reportQuarter 报告季度
     * @return 持仓数据列表
     */
    List<ETFPosiation> selectByFundCodeAndReportPeriod(@Param("fundCode") String fundCode,
                                                       @Param("reportYear") Integer reportYear,
                                                       @Param("reportQuarter") Integer reportQuarter);

    /**
     * 查询指定基金近2年的持仓数据
     * @param fundCode 基金代码
     * @return 持仓数据列表
     */
    List<ETFPosiation> selectRecentTwoYearsByFundCode(@Param("fundCode") String fundCode);

    /**
     * 更新ETF持仓数据
     * @param etfPosiation ETF持仓数据对象
     * @return 更新的行数
     */
    int updateByFundCodeAndStockCode(@Param("etfPosiation") ETFPosiation etfPosiation);

    /**
     * 根据基金代码删除持仓数据
     * @param fundCode 基金代码
     * @return 删除的行数
     */
    int deleteByFundCode(@Param("fundCode") String fundCode);

    /**
     * 根据基金代码、年份和季度删除持仓数据
     * @param fundCode 基金代码
     * @param reportYear 报告年份
     * @param reportQuarter 报告季度
     * @return 删除的行数
     */
    int deleteByFundCodeAndReportPeriod(@Param("fundCode") String fundCode,
                                        @Param("reportYear") Integer reportYear,
                                        @Param("reportQuarter") Integer reportQuarter);

    /**
     * 清空ETF持仓表
     * @return 删除的行数
     */
    int truncateTable();
}